home *** CD-ROM | disk | FTP | other *** search
-
- {*******************************************************}
- { }
- { Delphi Visual Component Library }
- { }
- { Copyright (c) 1995,97 Borland International }
- { }
- {*******************************************************}
-
- unit DBGrids;
-
- {$R-}
-
- interface
-
- uses Windows, SysUtils, Messages, Classes, Controls, Forms, StdCtrls,
- Graphics, Grids, DBCtrls, Db, Menus;
-
- type
- TColumnValue = (cvColor, cvWidth, cvFont, cvAlignment, cvReadOnly, cvTitleColor,
- cvTitleCaption, cvTitleAlignment, cvTitleFont, cvImeMode, cvImeName);
- TColumnValues = set of TColumnValue;
-
- const
- ColumnTitleValues = [cvTitleColor..cvTitleFont];
- cm_DeferLayout = WM_USER + 100;
-
- { TColumn defines internal storage for column attributes. Values assigned
- to properties are stored in this object, the grid- or field-based default
- sources are not modified. Values read from properties are the previously
- assigned value, if any, or the grid- or field-based default values if
- nothing has been assigned to that property. This class also publishes the
- column attribute properties for persistent storage. }
- type
- TColumn = class;
- TCustomDBGrid = class;
-
- TColumnTitle = class(TPersistent)
- protected
- procedure RefreshDefaultFont;
- public
- constructor Create(Column: TColumn);
- destructor Destroy; override;
- procedure Assign(Source: TPersistent); override;
- function DefaultAlignment: TAlignment;
- function DefaultColor: TColor;
- function DefaultFont: TFont;
- function DefaultCaption: string;
- procedure RestoreDefaults; virtual;
- published
- property Alignment: TAlignment;
- property Caption: string;
- property Color: TColor;
- property Font: TFont;
- end;
-
- TColumnButtonStyle = (cbsAuto, cbsEllipsis, cbsNone);
-
- TColumn = class(TCollectionItem)
- protected
- function CreateTitle: TColumnTitle; virtual;
- function GetGrid: TCustomDBGrid;
- function GetDisplayName: string; override;
- procedure RefreshDefaultFont;
- public
- constructor Create(Collection: TCollection); override;
- destructor Destroy; override;
- procedure Assign(Source: TPersistent); override;
- function DefaultAlignment: TAlignment;
- function DefaultColor: TColor;
- function DefaultFont: TFont;
- function DefaultImeMode: TImeMode;
- function DefaultImeName: TImeName;
- function DefaultReadOnly: Boolean;
- function DefaultWidth: Integer;
- procedure RestoreDefaults; virtual;
- property Grid: TCustomDBGrid;
- property AssignedValues: TColumnValues;
- property Field: TField;
- published
- property Alignment: TAlignment;
- property ButtonStyle: TColumnButtonStyle default cbsAuto;
- property Color: TColor;
- property DropDownRows: Cardinal default 7;
- property FieldName: String;
- property Font: TFont;
- property ImeMode: TImeMode;
- property ImeName: TImeName;
- property PickList: TStrings;
- property PopupMenu: TPopupMenu;
- property ReadOnly: Boolean;
- property Title: TColumnTitle;
- property Width: Integer;
- end;
-
- TColumnClass = class of TColumn;
-
- TDBGridColumnsState = (csDefault, csCustomized);
-
- TDBGridColumns = class(TCollection)
- protected
- function GetOwner: TPersistent; override;
- procedure Update(Item: TCollectionItem); override;
- public
- constructor Create(Grid: TCustomDBGrid; ColumnClass: TColumnClass);
- function Add: TColumn;
- procedure LoadFromFile(const Filename: string);
- procedure LoadFromStream(S: TStream);
- procedure RestoreDefaults;
- procedure RebuildColumns;
- procedure SaveToFile(const Filename: string);
- procedure SaveToStream(S: TStream);
- property State: TDBGridColumnsState;
- property Grid: TCustomDBGrid;
- property Items[Index: Integer]: TColumn; default;
- end;
-
- TGridDataLink = class(TDataLink)
- protected
- procedure ActiveChanged; override;
- procedure DataSetChanged; override;
- procedure DataSetScrolled(Distance: Integer); override;
- procedure FocusControl(Field: TFieldRef); override;
- procedure EditingChanged; override;
- procedure LayoutChanged; override;
- procedure RecordChanged(Field: TField); override;
- procedure UpdateData; override;
- function GetMappedIndex(ColIndex: Integer): Integer;
- public
- constructor Create(AGrid: TCustomDBGrid);
- destructor Destroy; override;
- function AddMapping(const FieldName: string): Boolean;
- procedure ClearMapping;
- procedure Modified;
- procedure Reset;
- property DefaultFields: Boolean;
- property FieldCount: Integer;
- property Fields[I: Integer]: TField;
- property SparseMap: Boolean;
- end;
-
- TBookmarkList = class
- protected
- function CurrentRow: TBookmarkStr;
- function Compare(const Item1, Item2: TBookmarkStr): Integer;
- procedure LinkActive(Value: Boolean);
- public
- constructor Create(AGrid: TCustomDBGrid);
- destructor Destroy; override;
- procedure Clear; // free all bookmarks
- procedure Delete; // delete all selected rows from dataset
- function Find(const Item: TBookmarkStr; var Index: Integer): Boolean;
- function IndexOf(const Item: TBookmarkStr): Integer;
- function Refresh: Boolean;// drop orphaned bookmarks; True = orphans found
- property Count: Integer;
- property CurrentRowSelected: Boolean;
- property Items[Index: Integer]: TBookmarkStr; default;
- end;
-
- TDBGridOption = (dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator,
- dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,
- dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect);
- TDBGridOptions = set of TDBGridOption;
-
- { The DBGrid's DrawDataCell virtual method and OnDrawDataCell event are only
- called when the grid's Columns.State is csDefault. This is for compatibility
- with existing code. These routines don't provide sufficient information to
- determine which column is being drawn, so the column attributes aren't
- easily accessible in these routines. Column attributes also introduce the
- possibility that a column's field may be nil, which would break existing
- DrawDataCell code. DrawDataCell, OnDrawDataCell, and DefaultDrawDataCell
- are obsolete, retained for compatibility purposes. }
- TDrawDataCellEvent = procedure (Sender: TObject; const Rect: TRect; Field: TField;
- State: TGridDrawState) of object;
-
- { The DBGrid's DrawColumnCell virtual method and OnDrawColumnCell event are
- always called, when the grid has defined column attributes as well as when
- it is in default mode. These new routines provide the additional
- information needed to access the column attributes for the cell being
- drawn, and must support nil fields. }
-
- TDrawColumnCellEvent = procedure (Sender: TObject; const Rect: TRect;
- DataCol: Integer; Column: TColumn; State: TGridDrawState) of object;
- TDBGridClickEvent = procedure (Column: TColumn) of object;
-
- TCustomDBGrid = class(TCustomGrid)
- protected
- FUpdateFields: Boolean;
- FAcquireFocus: Boolean;
- FUpdatingEditor: Boolean;
- function RawToDataColumn(ACol: Integer): Integer;
- function DataToRawColumn(ACol: Integer): Integer;
- function AcquireLayoutLock: Boolean;
- procedure BeginLayout;
- procedure BeginUpdate;
- procedure CancelLayout;
- function CanEditAcceptKey(Key: Char): Boolean; override;
- function CanEditModify: Boolean; override;
- function CanEditShow: Boolean; override;
- procedure CellClick(Column: TColumn); dynamic;
- procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
- procedure ColEnter; dynamic;
- procedure ColExit; dynamic;
- procedure ColWidthsChanged; override;
- function CreateColumns: TDBGridColumns; dynamic;
- function CreateEditor: TInplaceEdit; override;
- procedure CreateWnd; override;
- procedure DeferLayout;
- procedure DefaultHandler(var Msg); override;
- procedure DefineFieldMap; virtual;
- procedure DefineProperties(Filer: TFiler); override;
- procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
- procedure DrawDataCell(const Rect: TRect; Field: TField;
- State: TGridDrawState); dynamic; { obsolete }
- procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
- Column: TColumn; State: TGridDrawState); dynamic;
- procedure EditButtonClick; dynamic;
- procedure EndLayout;
- procedure EndUpdate;
- function GetColField(DataCol: Integer): TField;
- function GetEditLimit: Integer; override;
- function GetEditMask(ACol, ARow: Longint): string; override;
- function GetEditText(ACol, ARow: Longint): string; override;
- function GetFieldValue(ACol: Integer): string;
- function HighlightCell(DataCol, DataRow: Integer; const Value: string;
- AState: TGridDrawState): Boolean; virtual;
- procedure KeyDown(var Key: Word; Shift: TShiftState); override;
- procedure KeyPress(var Key: Char); override;
- procedure LayoutChanged; virtual;
- procedure LinkActive(Value: Boolean); virtual;
- procedure Loaded; override;
- procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer); override;
- procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer); override;
- procedure Notification(AComponent: TComponent; Operation: TOperation); override;
- procedure Scroll(Distance: Integer); virtual;
- procedure SetColumnAttributes; virtual;
- procedure SetEditText(ACol, ARow: Longint; const Value: string); override;
- function StoreColumns: Boolean;
- procedure TimedScroll(Direction: TGridScrollDirection); override;
- procedure TitleClick(Column: TColumn); dynamic;
- property Columns: TDBGridColumns;
- property DefaultDrawing: Boolean default True;
- property DataSource: TDataSource;
- property DataLink: TGridDataLink;
- property IndicatorOffset: Byte;
- property LayoutLock: Byte;
- property Options: TDBGridOptions default [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];
- property ParentColor default False;
- property ReadOnly: Boolean default False;
- property SelectedRows: TBookmarkList;
- property TitleFont: TFont;
- property UpdateLock: Byte;
- property OnColEnter: TNotifyEvent;
- property OnColExit: TNotifyEvent;
- property OnDrawDataCell: TDrawDataCellEvent; { obsolete }
- property OnDrawColumnCell: TDrawColumnCellEvent;
- property OnEditButtonClick: TNotifyEvent;
- property OnColumnMoved: TMovedEvent;
- property OnCellClick: TDBGridClickEvent;
- property OnTitleClick: TDBGridClickEvent;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure DefaultDrawDataCell(const Rect: TRect; Field: TField;
- State: TGridDrawState); { obsolete }
- procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
- Column: TColumn; State: TGridDrawState);
- function ValidFieldIndex(FieldIndex: Integer): Boolean;
- property EditorMode;
- property FieldCount: Integer;
- property Fields[FieldIndex: Integer]: TField;
- property SelectedField: TField;
- property SelectedIndex: Integer;
- end;
-
- TDBGrid = class(TCustomDBGrid)
- public
- property Canvas;
- property SelectedRows;
- published
- property Align;
- property BorderStyle;
- property Color;
- property Columns stored False; //StoreColumns;
- property Ctl3D;
- property DataSource;
- property DefaultDrawing;
- property DragCursor;
- property DragMode;
- property Enabled;
- property FixedColor;
- property Font;
- property ImeMode;
- property ImeName;
- property Options;
- property ParentColor;
- property ParentCtl3D;
- property ParentFont;
- property ParentShowHint;
- property PopupMenu;
- property ReadOnly;
- property ShowHint;
- property TabOrder;
- property TabStop;
- property TitleFont;
- property Visible;
- property OnCellClick;
- property OnColEnter;
- property OnColExit;
- property OnColumnMoved;
- property OnDrawDataCell; { obsolete }
- property OnDrawColumnCell;
- property OnDblClick;
- property OnDragDrop;
- property OnDragOver;
- property OnEditButtonClick;
- property OnEndDrag;
- property OnEnter;
- property OnExit;
- property OnKeyDown;
- property OnKeyPress;
- property OnKeyUp;
- property OnStartDrag;
- property OnTitleClick;
- end;
-
- const
- IndicatorWidth = 11;
-
- implementation
-